1️⃣ 什么是防抖和节流?

🇨🇳 中文(面试标准答案)

🇺🇸 English (interview version)

 

2️⃣ 经典面试追问:二者的区别是什么?

🇨🇳 中文口语版

👉 举例:

🇺🇸 English

 

3️⃣ 手写防抖

JavaScript 实现

面试口语解释

🇨🇳: 核心就是用 setTimeout + clearTimeout,每次触发都清掉上一次的定时器,只保留最后一次。

🇺🇸: We use setTimeout and cancel previous timers with clearTimeout to ensure only the last call is executed.

 

4️⃣ 手写节流

时间戳版本(常见)

定时器版本(另一种)

面试解释

🇨🇳: 节流就是“规定时间内只允许执行一次”,要么用时间戳控制,要么用定时器锁住。

🇺🇸: Throttle ensures the function runs only once per time interval using either timestamps or a timer lock.

 

5️⃣ 进阶追问(面试官很爱问)

Q1:防抖能不能立即执行第一次?

👉 可以(leading debounce)

 

Q2:节流最后一次能不能执行?

👉 可以(trailing throttle),但需要稍微升级实现(面试加分点)

 

Q3:应用场景区别(非常重要)

场景技术
输入搜索防抖
resize节流
scroll监听节流
按钮点击防重复提交防抖
游戏按键节流

 

6️⃣ 一句话总结(面试杀手锏)

🇨🇳 中文

🇺🇸 English

 

7️⃣ 如果面试官继续深挖(加分点)

可以这样说:

防抖适合“最终状态”,节流适合“过程控制”

 

 

防抖节流 + React Hooks 实现版(useDebounce / useThrottle)

① useDebounce(React 防抖 Hook)

使用场景

核心思路

实现代码

面试解释(口语版)

🇨🇳: 每次 value 变化时我不会立即更新,而是启动一个定时器。如果在 delay 时间内 value 又变化了,就清除上一次的定时器,只保留最后一次更新。

🇺🇸: It delays updating the state until the value stops changing for a given delay.

使用方式

 

② useThrottle(React 节流 Hook)

使用场景

核心思路

版本1:时间戳实现(推荐)

版本2:定时器实现(更稳定)

面试解释(口语版)

🇨🇳: 节流就是控制更新频率,在一定时间内只允许执行一次 state 更新。

🇺🇸: Throttle limits how often state can be updated during continuous changes.

 

 

③ React 面试加分点(重点!!!)

面试官经常追问👇

Q1:为什么要用 useRef 存 timer?

👉 答:

🇨🇳: 因为 useRef 不会触发重新渲染,而且可以跨 render 保持同一个值。

🇺🇸: useRef keeps a stable mutable value across renders without causing re-renders.

 

Q2:useDebounce vs useThrottle 本质区别?

维度useDebounceuseThrottle
触发方式停止后执行按间隔执行
场景搜索滚动
控制方式清定时器限制频率

 

Q3:能不能封装成“函数防抖 Hook”?

👉 可以升级(高级面试题):

 

④ 面试终极总结

🇨🇳 中文

🇺🇸 English